global escalaDeGrises
%define sumandoextra [ebp-4]
section .text

escalaDeGrises:
    push    ebp
    mov     ebp, esp
    sub     esp, 4
    push    ebx
    push    edi
    push    esi
    crearsumando:
    ; almaceno el sumando extra 
    mov     eax, [ebp + 16]
    mov     DWORD sumandoextra, 0
    xor     edx, edx
    mov     ebx, 4
    div     ebx
    cmp     edx, 0
    jz      seguir
    sub     ebx, edx
    mov     sumandoextra, ebx
 
seguir:  
    mov     esi, [ebp + 8]  ; esi <- inicio de la matriz
    mov     ecx, [ebp + 12] ; ecx <- cantidad de bytes pensado como vector,
                            ; es decir filas * columnas 
    mov     di, 3        ; tres que uso para sacar el promedio
    mov ebx, [ebp + 16]

ciclo:
    mov     ebx, [ebp + 16]
    
    ciclo2:
    cmp     ebx, 0
    je finCiclo2
    xor     eax, eax     ; limpio los registros
    xor     edx, edx
    mov     al, [esi]    ; cargo el red en al
    mov     dl, [esi+2]  ; en bl cargo el blue
    add     edx, eax     ; sumo 
    xor     eax, eax
    mov     al, [esi + 1]
    add     edx, eax 
    mov     ax, dx       ; muevo a ax para hacer la division 
    xor     edx, edx     ; pongo en 0 edx, porque dividir por di hace dx:ax/di    
    div     di    
    mov     [esi], al    ; pongo el resultado en cada color
    mov     [esi+1], al
    mov     [esi+2], al
    add     esi, 3       ; me muevo al proximo pixel
    sub     ebx, 3
    jmp     ciclo2

    finCiclo2:
    add esi, sumandoextra
    loop    ciclo

    pop     esi
    pop     edi
    pop     ebx
    add     esp, 4
    pop     ebp
    ret
